package singleUseDeprecated;

import com.google.gson.reflect.TypeToken;
import model.User;

import java.lang.reflect.Type;

public class TypeTokenExample {

    /**
     * 获取一个 TypeToken 对象，表示泛型类型。
     *
     */
    public <T> TypeToken<T> createTypeToken(Class<T> clazz) {
        return TypeToken.get(clazz);  // 使用 TypeToken.get 方法来创建 TypeToken
    }
    /**
     * 判断当前 TypeToken 是否可以赋值给指定的 Class 类型。
     *
     */
    public boolean isAssignableFromClass(Class<?> cls) {
        return createTypeToken(User.class).isAssignableFrom(cls);  // 使用明确类型 User.class
    }
    // 替代 isAssignableFrom(Class<?> cls)
    public boolean isAssignableFromClass2(Class<?> cls) {
        return new TypeToken<User>() {}.getType().equals(cls);
    }


    /**
     * 判断当前 TypeToken 是否可以赋值给指定的 Type 类型。
     *
     */
    public boolean isAssignableFromType(Type from) {
        return createTypeToken(User.class).isAssignableFrom(from);
    }
    //替换API
    public boolean isAssignableFromType2(Type from) {
        return new TypeToken<User>() {}.getType().equals(from);  // 使用 TypeToken 来替换
    }

    /**
     * 判断当前 TypeToken 是否可以赋值给另一个 TypeToken。
     */
    public boolean isAssignableFromToken(TypeToken<?> token) {
        return createTypeToken(User.class).isAssignableFrom(token);  // 使用明确类型 User.class
    }
    public boolean isAssignableFromToken2(TypeToken<?> token) {
        return new TypeToken<User>() {}.getType().equals(token.getType());  // 使用 TypeToken 来替换
    }
}
